package CommonDataLayer;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;


public class ConexionDB {
    
    private final static ConexionDB _instancia = new ConexionDB();
    private String _servidor;
    private String _dataBase;
    private String _usuario;
    private String _clave;
    
    private ConexionDB() {
    }

    public static ConexionDB getInstancia() {
        return _instancia;
    }
    
    public Connection getConexion() throws Exception {
        try {
            cargarParametros();
            String cadena = "jdbc:sqlserver://"+_servidor+";databaseName="+ _dataBase +";";
            
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            return  DriverManager.getConnection(cadena,_usuario,_clave);
        }
        catch (SQLException ex) {
            throw new Exception(ex);
        }
        catch (ClassNotFoundException ex) {
            throw new Exception(ex);
        }
    }
    
    public Connection getConexion(String servidor, String dataBase, String usuario, String clave) throws Exception {
        try {
            String cadena = "jdbc:sqlserver://"+servidor+";databaseName="+ dataBase +";";
            
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            return  DriverManager.getConnection(cadena,usuario,clave);
        }
        catch (SQLException ex) {
            throw new Exception(ex);
        }
        catch (ClassNotFoundException ex) {
            throw new Exception(ex);
        }
    }
    
    private void cargarParametros() throws Exception {
        SAXBuilder builder = new SAXBuilder();
        File xmlFile = new File("conexion.xml");
        
        try{
            if ( xmlFile.isFile() ){
                Document document = (Document) builder.build(xmlFile);
                Element rootNode = document.getRootElement();
                List list = rootNode.getChildren( "Conexion" );
                
                if ( list.size()>0 ){
                    Element conexion = (Element) list.get(0);
                    List parametros = conexion.getChildren();
                    
                    if (parametros.size()==4){
                        _servidor = ((Element)parametros.get(0)).getTextTrim();
                        _dataBase = ((Element)parametros.get(1)).getTextTrim();
                        _usuario = ((Element)parametros.get(2)).getTextTrim();
                        _clave = ((Element)parametros.get(3)).getTextTrim();
                    }
                    else{
                        throw new Exception("El archivo de configuración esta dañado.");
                    }
                }
                else{
                    throw new Exception("El archivo de configuración esta dañado.");
                }
            }
            else{
                throw new Exception("No se encontro el archivo de configuración.");
            }
        } catch(IOException ex){
            throw new Exception(ex);
        } catch (JDOMException ex) {
            throw new Exception(ex);
        }
    }
}
